package view;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;



import model.Advertentie;
import model.CiiBay;
import model.Gebruiker;


/**
 * Zorgt ervoor dat een enkele advertentie wordt getoond als je op een label klikt
 * @author Yasper, Dennis
 */
@SuppressWarnings("serial")
public class TotaalOverzicht extends JPanel {
	private CiiBay ciiBay;
	private JPanel statestiek;
	private VerkochtPaneel verkocht;
	private GekochtPaneel gekocht;
	private JScrollPane scroll1, scroll2;

	
	/**
	 * Constructor voor TotaalOverzicht
	 * @author Yasper, Dennis
	 * @param ciiBay
	 */
	public TotaalOverzicht(CiiBay ciiBay) {
		this.ciiBay = ciiBay;
		statestiek = new EnkelGebruikerZoekResultaat((Gebruiker)ciiBay.getIngelogtPersoon(), ciiBay);
		gekocht = new GekochtPaneel(ciiBay.getGekochteArtikelenVanGebruiker(ciiBay.getIngelogtPersoon().getID()));
		verkocht = new VerkochtPaneel(ciiBay.getVerkochteArtikelenVanGebruiker(ciiBay.getIngelogtPersoon().getID()));
//		scroll1 = new JScrollPane(gekocht,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//		scroll1.setBorder(null);
//		scroll2 = new JScrollPane(verkocht,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//		scroll2.setBorder(null);
		maakLayout();
	}

	/**
	 * Deze methode maakt de layout.
	 * @author Yasper, Dennis
	 */
	public void maakLayout() {
		setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		c.fill = GridBagConstraints.BOTH;
		this.setBackground(Color.ORANGE);
		gekocht.setBackground(Color.ORANGE);
		verkocht.setBackground(Color.ORANGE);
		statestiek.setBorder(BorderFactory.createMatteBorder(2, 2, 1, 2, Color.BLACK));
		gekocht.setBorder(BorderFactory.createMatteBorder(1, 2, 2, 1, Color.BLACK));
		verkocht.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2, Color.BLACK));

		int y = 0;
		if(gekocht.getGekochtArray().size() > verkocht.getVerkochtArray().size()){
			y = gekocht.getGekochtArray().size();
		} else{
			y = verkocht.getVerkochtArray().size();
		}
		gekocht.voegListToe(y);
		verkocht.voegListToe(y);
		JPanel ads = new JPanel(new GridLayout(1,2));
		add(statestiek, c);
		c.gridy = 1;
		//ads.add(scroll1);
		//ads.add(scroll2);
		ads.add(gekocht);
		ads.add(verkocht);
		add(ads, c);
	}

	
	/**
	 * klasse dat de titels en een link geeft naar de gekochte artikelen
	 * @author Yasper, Dennis
	 */
	class GekochtPaneel extends JPanel {
		private ArrayList<Titel> gekochtArray;
		private JLabel naam;

		/**
		 * Constructor voor het GekochtPaneel
		 * @author Yasper, Dennis
		 * @param gekochteArtikelenVanGebruiker
		 */
		public GekochtPaneel(ArrayList<Advertentie> gekochteArtikelenVanGebruiker) {
			gekochtArray = new ArrayList<Titel>();
			naam = new JLabel("Gekocht: ");
			for(Advertentie a: gekochteArtikelenVanGebruiker) {		
				Titel titel = new Titel(a,"" + a.getTitel());
				titel.setForeground(Color.BLUE);
				titel.addMouseListener(new KlikListener((Titel) titel));
				gekochtArray.add((Titel) titel);
			}
		}

		/**
		 * voegt de lijst met gekochte artikelen toe aan het scherm.
		 * @author Yasper, Dennis
		 * @param y
		 */
		public void voegListToe(int y){
			setLayout(new GridLayout(y+1, 1));
			add(naam);
			for(JLabel l: gekochtArray) {				
				add(l);
			}
		}

		/**
		 * geeft de lijst met titels van gekochteArtikelen
		 * @author Yasper, Dennis
		 * @return gekochtArray
		 */
		public ArrayList<Titel> getGekochtArray(){
			return gekochtArray;
		}

	}

	/**
	 * klasse dat de titels en een link geeft naar de verkochte artikelen
	 * @author Yasper, Dennis
	 */
	class VerkochtPaneel extends JPanel {

		private ArrayList<Titel> verkochtArray;
		private JLabel naam;

		public VerkochtPaneel(ArrayList<Advertentie> verkochteArtikelenVanGebruiker) {
			verkochtArray = new ArrayList<Titel>();
			naam = new JLabel("Verkocht: ");
			for(Advertentie a: verkochteArtikelenVanGebruiker) {
				Titel titel = new Titel(a, "" + a.getTitel());
				titel.setForeground(Color.BLUE);
				titel.addMouseListener(new KlikListener(titel));
				verkochtArray.add(titel);
			}
		}

		/**
		 * voegt de lijst met verkochte artikelen toe aan het scherm.
		 * @author Yasper, Dennis
		 * @param y
		 */
		public void voegListToe(int y){
			setLayout(new GridLayout(y+1, 1));
			add(naam);
			for(JLabel l: verkochtArray) {				
				add(l);
			}
		}

		/**
		 * geeft de lijst met titels van verkochteArtikelen
		 * @author Yasper, Dennis
		 * @return verkochtArray
		 */
		public ArrayList<Titel> getVerkochtArray(){
			return verkochtArray;
		}
	}

	/**
	 * Klasse dat de titel van een advertentie weergeeft
	 * @author Yasper, Dennis
	 * @return gekochtArray
	 */
	class Titel extends JLabel {
		private Advertentie advertentie;

		/**
		 * Constructor
		 * @author Yasper, Dennis
		 * @param ad, tekst
		 */
		public Titel(Advertentie ad, String tekst) {
			advertentie = ad;
			setText(tekst);
		}

		/**
		 * geeft een advertentie terug
		 * @author Yasper, Dennis
		 * @return advertentie
		 */
		public Advertentie getAdvertentie(){
			return advertentie;
		}
	}

	
	/**
	 * Zorgt ervoor dat een enkele advertentie wordt getoond als je op een label klikt
	 * @author Yasper
	 */
	class KlikListener extends MouseAdapter {
		private Titel titel;

		public KlikListener(Titel titel) {
			this.titel = titel;
		}
		@Override
		public void mouseClicked(MouseEvent arg0) {
			ciiBay.inlezen();
			ciiBay.setGeklikteAdvertentie(titel.getAdvertentie());
			ciiBay.veranderView("advertentieView");	
		}
	}
}

